/*
 * Copyright (c) 1982, 1986 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 *
 *  @(#)mtio.h  7.1.2 (2.11BSD) 1998/3/7
 */

/*
 * Structures and definitions for mag tape io control commands
 */

/* structure for MTIOCTOP - mag tape op command */
struct  mtop    {
    short   mt_op;      /* operations defined below */
    daddr_t mt_count;   /* how many of them */
};

/* operations */
#define MTWEOF      0   /* write an end-of-file record */
#define MTFSF       1   /* forward space file */
#define MTBSF       2   /* backward space file */
#define MTFSR       3   /* forward space record */
#define MTBSR       4   /* backward space record */
#define MTREW       5   /* rewind */
#define MTOFFL      6   /* rewind and put the drive offline */
#define MTNOP       7   /* no operation, sets status only */
#define MTCACHE     8   /* enable controller cache */
#define MTNOCACHE   9 /* disable controller cache */
#define MTFLUSH     10  /* flush cache */

/* structure for MTIOCGET - mag tape get status command */

struct  mtget   {
    short   mt_type;    /* type of magtape device */
/* the following two registers are grossly device dependent */
    short   mt_dsreg;   /* ``drive status'' register */
    short   mt_erreg;   /* ``error'' register */
/* end device-dependent registers */
    short   mt_resid;   /* residual count */
/* the following two are not yet implemented */
    daddr_t mt_fileno;  /* file number of current position */
    daddr_t mt_blkno;   /* block number of current position */
/* end not yet implemented */
};

/*
 * Constants for mt_type byte.  These are the same
 * for other controllers compatible with the types listed.
 */
#define MT_ISTS     0x01        /* TS-11 */
#define MT_ISHT     0x02        /* TM03 Massbus: TE16, TU45, TU77 */
#define MT_ISTM     0x03        /* TM11/TE10 Unibus */
#define MT_ISMT     0x04        /* TM78/TU78 Massbus */
#define MT_ISUT     0x05        /* SI TU-45 emulation on Unibus */
#define MT_ISCPC    0x06        /* SUN */
#define MT_ISAR     0x07        /* SUN */
#define MT_ISTMSCP  0x08        /* DEC TMSCP protocol (TU81, TK50) */

/*
 * At present only the TMSCP driver reports this information in the
 * high byte of the 'drive status' word.  Other drives will (hopefully)
 * be updated in the future.
*/
#define MTF_BOM     0x01        /* At beginning of media */
#define MTF_EOM     0x02        /* At the end of media */
#define MTF_OFFLINE 0x04        /* Drive is offline */
#define MTF_WRTLCK  0x08        /* Drive is write protected */
#define MTF_WRITTEN 0x10        /* Tape has been written */

/* mag tape io control commands */
#define MTIOCTOP    _IOW('m', 1, struct mtop)   /* do a mag tape op */
#define MTIOCGET    _IOR('m', 2, struct mtget)  /* get tape status */
#define MTIOCIEOT   _IO ('m', 3)                /* ignore EOT error */
#define MTIOCEEOT   _IO ('m', 4)                /* enable EOT error */
